iT邦幫忙

2022 iThome 鐵人賽

DAY 9
1
Software Development

離開C#新手村的最後試煉系列 第 9

# 試煉9 - 四捨五入的坑踩過了嗎

  • 分享至 

  • xImage
  •  

開始試煉

Math 有提供 Round 方法 說明如下
將值四捨五入為最接近的整數或是指定的小數位數。

然後就很馬上測試一下
Math.Round(1.5).Dump();
結果是 2
很好沒問題就這樣用吧
直到被發Bug單 還不知道為何會有Bug

原來Math.Round針對四捨五入的預設邏輯是採用四捨六入五成雙的方式

Math.Round(0.5).Dump();
Math.Round(1.5).Dump();
Math.Round(2.5).Dump();
Math.Round(3.5).Dump();

結果會是
0
2
2
4

印象非常深刻的坑
對於 程式是按照我寫的跑 不是按照我想的跑 這句名言
不停在我腦海迴盪

回到正題要如何修好呢
public static double Round(double value, MidpointRounding mode)
MidpointRounding這個列舉 AwayFromZero 就是我們習慣的四捨五入

void Main()
{
	Math.Round(0.5,MidpointRounding.AwayFromZero).Dump();
	Math.Round(1.5,MidpointRounding.AwayFromZero).Dump();
	Math.Round(2.5,MidpointRounding.AwayFromZero).Dump();
	Math.Round(3.5,MidpointRounding.AwayFromZero).Dump();
}

結果會是
1
2
3
4
這樣就是習慣用的四捨五入了

結束試煉

今天提到Math.Round 雖然有了解法 但是大家在下副本時怎樣能夠讓新手村來實習的人
很容易避開這樣的坑呢 大家想想之後試煉會提到

參考
Math.Round 方法

MidpointRounding 列舉


上一篇
試煉8 - 開始練習組合技1 物件導向 + 泛型
下一篇
# 試煉10 - 還在用字串,組網址 組路徑嗎
系列文
離開C#新手村的最後試煉30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言